package db

import (
	"fmt"

	"github.com/bwmarrin/snowflake"
	"gorm.io/gorm"
)

type DbFieldPlugin struct{}

func (op *DbFieldPlugin) Name() string {
	return "dbFieldPlugin"
}

func (op *DbFieldPlugin) Initialize(db *gorm.DB) (err error) {
	// 创建字段的时候雪花算法生成id
	db.Callback().Create().Before("gorm:create").Replace("id", func(db *gorm.DB) {
		node, _ := snowflake.NewNode(1)
		id := node.Generate()
		db.Statement.SetColumn("id", fmt.Sprintf("%d", id))
		accountId := db.Statement.Context.Value("accountId")
		//fmt.Println(accountId, "????")
		db.Statement.SetColumn("creator", accountId)
	})
	// 创建人
	db.Callback().Create().Before("gorm:create").Replace("creator", func(db *gorm.DB) {
		if db.Statement.Schema != nil {
			fmt.Println("创建的钩子函数")
			// 获取到上下文中数据
			accountId := db.Statement.Context.Value("accountId")
			fmt.Println(accountId, "????")
			db.Statement.SetColumn("creator", accountId)
		}
	})
	// 更新人
	db.Callback().Update().Before("gorm:before_update").Replace("updated_by", func(db *gorm.DB) {
		if db.Statement.Schema != nil {
			fmt.Println("修改")
			accountId := db.Statement.Context.Value("accountId")
			db.Statement.SetColumn("updated_by", accountId)
		}
	})
	// 删除人
	db.Callback().Delete().Before("gorm:delete").Replace("deleted_by", func(db *gorm.DB) {
		if db.Statement.Schema != nil {
			accountId := db.Statement.Context.Value("accountId")
			fmt.Println("删除1111", accountId)
			db.Statement.SetColumn("deleted_by", accountId)
		}
	})
	return
}
